﻿using Microsoft.Kinect;
using System;

namespace K4Wv2PointCloud
{
    /// <summary>
    /// Test Programm für PointCloud von Kinect lesen.
    /// </summary>
    class Program
    {
        /// <summary>
        /// Erzeuge <see cref="K4Wv2PointCloud"/> und melde Listener an. Bei PointCloudReady Event wird auf
        /// der Konsole ausgegeben, wieviele Punkte einen nicht unendlichen Z-Wert haben.
        /// <para>
        /// PointClouds lesen wird mit Tastendruck gestartet und wieder mit Tastendruck beendet.
        /// </para>
        /// </summary>
        /// <param name="args">The arguments.</param>
        static void Main(string[] args) {
            var ptCloudReader = new K4Wv2PointCloud();
            ptCloudReader.PointCloudReady += ptCloudReader_PointCloudReady;

            Console.WriteLine("K4W v2 starten und Punktwolken erzeugen.\nTaste drücken, um fortzufahren...\n");
            Console.ReadKey(false);

            bool isInit = ptCloudReader.Initialize();


            Console.WriteLine("K4Wv2PointCloud Initialisiert? " + (isInit?"ja":"NEIN!"));
            Console.ReadKey(false);

            ptCloudReader.Stop();


            Console.WriteLine("Kinect und PCld-Leser gestoppt.\nTaste drücken um zu beenden...");
            Console.ReadKey();
        }

        static void ptCloudReader_PointCloudReady(object sender, PointCloudReadyEventArg e) {
            CameraSpacePoint[] theCloud = e.PointCloud;
            int num = 0;
            foreach (var point in theCloud) {
                if (!float.IsInfinity(point.Z)) {
                    num++;
                }
            }
            Console.WriteLine(num + " / " + theCloud.Length);
        }
    }
}
